
# coding: utf-8

# # 数据探索
# 
# 数据来源于Kaggle竞赛：Event Recommendation Engine Challenge，根据
#     events they’ve responded to in the past
#     user demographic information
#     what events they’ve seen and clicked on in our app
# 用户对某个活动是否感兴趣
# 
# 竞赛官网：
# https://www.kaggle.com/c/event-recommendation-engine-challenge/data

# In[3]:


import pandas as pd
import numpy as np


# ## 先看看训练数据
# train.csv不大，可以一次全部读入

# In[4]:


"""
train.csv 有6列：
user：用户ID
event：活动ID
invited：是否被邀请（0/1）
timestamp：ISO-8601 UTC格式时间字符串，表示用户看到该活动的时间
interested, and not_interested

Test.csv 除了没有interested, and not_interested，其余列与train相同
"""

#读取数据
train = pd.read_csv("train.csv")
train.head()


# In[5]:


train.info()


# 没有缺失值，1.5w条记录

# ## 测试数据
# test.csv不大，可以一次全部读入

# In[6]:


"""
test同.csv 有4列：
user：用户ID
event：事件ID
invited：是否被邀请（0/1）
timestamp：ISO-8601 UTC格式时间字符串，表示用户看到该事件的时间
interested, and not_interested

Test.csv 除了没有interested, and not_interested，其余列与train相同
"""

#读取数据
test = pd.read_csv("test.csv")
test.head()


# In[7]:


test.info()


# 共1w条记录，也没有缺失值
# 测试集中时间特征列出现的时间比训练集晚（好像是大多数竞赛数据的惯例）
# 所以在将训练数据划分为训练集和校验集时，最好也是校验集中的时间比训练集晚，以模拟更好地测试的情况

# ## 用户数据
# users.csv不大，可以一次全部读入

# In[8]:


"""
用户描述信息在users.csv文件：共7维特征
user_id
locale：地区，语言
birthyear：出身年
gender：性别
joinedAt：用户加入APP的时间，ISO-8601 UTC time
location：地点
timezone：时区
"""

#读取数据
users = pd.read_csv("users.csv")
users.head()


# In[9]:


users.info()


# 共3.8w条记录
# 
# gender、joinedAt、location、timezone这几个特征有缺失值
# 所以需要做缺失值处理
# 
# 用户数比测试集和训练集中出现的用户多
# 为节省空间和时间，竞赛中可以只取出训练集和测试集中有的用户
# （猜测event也是一样，因为events.csv以gz压缩格式给出，记录数目应该更多）

# ## 活动数据
# events.csv太大，一次全部读入比较慢
# 数据探索就一次读入了，后续进行特征工程和模型训练不可用pandas一次读入
# 可以pandas一次读入部分
# 或者直接用文件io函数读入（比pandas效率高）

# In[10]:


"""
活动描述信息在events.csv文件：共110维特征
前9列：event_id, user_id, start_time, city, state, zip, country, lat, and lng.
event_id：id of the event, 
user_id：id of the user who created the event.  
city, state, zip, and country： more details about the location of the venue (if known).
lat and lng： floats（latitude and longitude coordinates of the venue）
start_time： 字符串，ISO-8601 UTC time，表示活动开始时间

后101列为词频：count_1, count_2, ..., count_100，count_other
count_N：活动描述出现第N个词的次数
count_other：除了最常用的100个词之外的其余词出现的次数
"""

#读取数据
events = pd.read_csv("events.csv")
events.head()


# In[11]:


events.info()


# 文件占用空间很大（2.6G+），统计信息也不给了。。。

# ## 活动参加者数据
# event_attendees.csv

# In[14]:


"""
event_attendees.csv文件：共5维特征
event_id：活动ID
yes, maybe, invited, and no：以空格隔开的用户列表，
分别表示该活动参加的用户、可能参加的用户，被邀请的用户和不参加的用户.
"""

#读取数据
event_attendees = pd.read_csv("event_attendees.csv")
event_attendees.head()


# In[15]:


event_attendees.info()


# 缺失数据很多（缺失值表示没有用户）

# ## 用户好友数据
# user_friends.csv

# In[13]:


"""
user_friends.csv文件：共2维特征
user：用户ID
friends：以空格隔开的用户好友ID列表，
"""

#读取数据
user_friends = pd.read_csv("user_friends.csv")
user_friends.head()


# In[16]:


user_friends.info()


# 也有缺失值（缺失值表示没有朋友？）
